1 正则表达式中的特殊符号
- {}
- .
- *
- ^
- $
1 | $ dmesg | grep -n -A3 -B2 'acip' #显示‘acip’所在行包括前2行和后3行,A(after)B(before) |
2 基础正则表达式汇总
3 正则表达式与bash通配符的比较
举例:查找以a开头的任何档名的文档
- 通配符的方式:
$ ls -l a*
- 正则的方式:
$ ls -l | grep '^a.*'
应用:找到/etc底下文件属性为链接文件的文件
1 | $ ls -l | grep '^l' |
4 sed
删除
1 | # 输出/etc/passwd的内容到屏幕并删除2-5行 |
插入
1 | # 在第二行后面输出两行文字 |
替换
1 | # 用stringstring取代2-5行 |
选择
1 | $ nl /etc/passwd | sed -n '5,7p' #仅列出5-7行 |
正则表达式的部分要用’/ /‘包裹
1 | $ cat /etc/manpath.config | grep 'man' | sed 's/^#.*$//g' | sed '/^$/d' #匹配有'man'的行,且去掉注释行 |
直接修改文件
1 | # 将行末以'.'结尾的'.', 替换为'!'(\.和\!都使用了跳脱符号) |
延伸正则
1 | # egrep <==> grep -E |
延伸正则详细
5 格式化输出
printf
1 | $ printf '\x43\n' # 查看16进制数43代表的字符 |
awk
1 | # 接受stdout并以[tab]作为 分隔的第一栏与第三栏 |
1 | $ cat pay.txt | awk 'NR==1{printf "%10s %10s %10s %10s %10s",$1,$2,$3,$4,"Total"} |
6 档案比对工具
diff
1 | $ mkdir -p /tmp/test #创建/tmp/test,如果没有/tmp就创建它 |
cmp
1 | $ cmp /tmp/test/passwd.old /tmp/test/passwd.new |